import md5 from 'js-md5';

/**
 * sec
 */
// export function sign(params, secret) {
//   var obj = objKeySort(params);
//   var value = '';
//   for (var item in obj) {
//     if (obj[item]) {
//       value += obj[item];
//       // console.log('item::::::::::'+item, obj[item])
//     }
//   }
//   //去除所有空格
//   value = value.replace(/\s+/g, "")
//   //进行UTF-8编码
//   value = encodeURI(value + secret);
//   //进行MD5码加密
//   value = md5(value)
//   return value.toLocaleUpperCase();
// }
//
// //util的排序函数
// function objKeySort(obj) {
//   //先用Object内置类的keys方法获取要排序对象的属性名，再利用Array原型上的sort方法对获取的属性名进行排序，newkey是一个数组
//   var newkey = Object.keys(obj).sort();
//   //创建一个新的对象，用于存放排好序的键值对　　
//   var newObj = {};
//   //遍历newkey数组
//   for (var i = 0; i < newkey.length; i++) {
//     //向新创建的对象中按照排好的顺序依次增加键值对
//     newObj[newkey[i]] = obj[newkey[i]];
//   }
//   //返回排好序的新对象
//   return newObj;
// }



/**
 * json参数升序
 * @param jsonObj 发送参数
 */

function sortAsc(jsonObj) {
  let arr = new Array();
  let num = 0;
  for (let i in jsonObj) {
    arr[num] = i;
    num++;
  }
  let sortArr = arr.sort();
  let sortObj = {};
  for (let i in sortArr) {
    sortObj[sortArr[i]] = jsonObj[sortArr[i]];
  }
  return sortObj;
}


/**
 * @param url 请求的url,应该包含请求参数(url的?后面的参数)
 * @param requestParams 请求参数(POST的JSON参数)
 * @returns {string} 获取签名
 */
export function getSign(requestParams) {
  // let urlParams = this.parseQueryString(url);
  // let jsonObj = this.mergeObject(urlParams, requestParams);
  let requestBody = sortAsc(requestParams);
  return md5(JSON.stringify(requestBody)).toUpperCase();
}

/**
 * @param url 请求的url
 * @returns {{}} 将url中请求参数组装成json对象(url的?后面的参数)
 */
function parseQueryString(url) {
  let urlReg = /^[^\?]+\?([\w\W]+)$/,
    paramReg = /([^&=]+)=([\w\W]*?)(&|$|#)/g,
    urlArray = urlReg.exec(url),
    result = {};
  if (urlArray && urlArray[1]) {
    let paramString = urlArray[1], paramResult;
    while ((paramResult = paramReg.exec(paramString)) != null) {
      result[paramResult[1]] = paramResult[2];
    }
  }
  return result;
}

/**
 * @returns {*} 将两个对象合并成一个
 */
function mergeObject(objectOne, objectTwo) {
  if (Object.keys(objectTwo).length > 0) {
    for (let key in objectTwo) {
      if (objectTwo.hasOwnProperty(key) === true) {
        objectOne[key] = objectTwo[key];
      }
    }
  }
  return objectOne;
}

function urlEncode(param, key, encode) {
  if (param == null) return '';
  let paramStr = '';
  let t = typeof (param);
  if (t == 'string' || t == 'number' || t == 'boolean') {
    paramStr += '&' + key + '=' + ((encode == null || encode) ? encodeURIComponent(param) : param);
  } else {
    for (let i in param) {
      let k = key == null ? i : key + (param instanceof Array ? '[' + i + ']' : '.' + i);
      paramStr += this.urlEncode(param[i], k, encode);
    }
  }
  return paramStr;
};
